/*
 * Filename:    IndicatorConfigDAO.java
 * Copyright:   2014 中国平安保险（集团）股份有限公司 版权所有
 * Company:     平安科技养老险及健康险系统开发部
 * Create at:   2014年10月10日
 */
package com.paic.mhis.hcpms.quota.indicatorconfig.intergration.dao;

import java.util.List;
import java.util.Map;

import com.paic.mhis.core.user.dto.RegionDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorAreaDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorBaseDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorConfigDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorOrgDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorTypeDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorValueDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorValues4CalDTO;
import com.paic.mhis.hcpms.quota.indicatorconfig.dto.IndicatorWarnValueDTO;

/**
 * 
 * @author EX-XIEQI001
 * 
 */
public interface IndicatorConfigDAO {

	/**
	 * 根据统筹区编码获取所有可新增的指标集合
	 * 
	 * @param map
	 *            参数 ：regionCode 统筹区编码 kpiCode 指标编码 kpiName 指标名称
	 * @return
	 */
	public List<IndicatorBaseDTO> queryIndicatorAddAll(Map<String, Object> map);

	/**
	 * 根据统筹区编码获取所有可新增的指标集合总数
	 * 
	 * @param map
	 *            参数 ：regionCode 统筹区编码 kpiCode 指标编码 kpiName 指标名称
	 * @return 指标集合
	 */
	public int queryIndicatorAddTotal(Map<String, Object> map);

	/**
	 * 根据统筹区编码获取所有的指标集合
	 * 
	 * @param regionCode
	 *            统筹区编码
	 * @return 指标集合
	 */
	public List<IndicatorBaseDTO> queryIndicatorBaseAll(String regionCode);

	/**
	 * 判断该区域是否正在进行指标分析
	 * 
	 * @param regionCode
	 *            统筹区编码
	 * @return true 是 false 否
	 */
	public boolean isLockIndicator(String regionCode);

	/**
	 * 根据统筹区编码和指标内部编码获取一条数据
	 * 
	 * @param map
	 *            参数 ：regionCode 统筹区编码 kpiId 指标内部编码
	 * @return IndicatorAreaDTO对象
	 */
	public IndicatorAreaDTO queryIndicatorArea(Map<String, Object> map);

	/**
	 * 根据统筹区编码和指标内部编码 查询一条指标信息
	 * 
	 * @param map
	 *            参数 ：regionCode 统筹区编码 kpiId 指标内部编码
	 * @return
	 */
	public IndicatorBaseDTO queryIndicatorBase(Map<String, Object> map);

	/**
	 * 根据指标内部编码获取默认的指标类型集合
	 * 
	 * @param kpiId
	 *            指标内部编码
	 * @return
	 */
	public List<IndicatorTypeDTO> queryIndicatorTypeBaseAll(String kpiId);

	/**
	 * 根据指标内部编码获取默认的指标机构集合
	 * 
	 * @param kpiId
	 *            指标内部编码
	 * @return
	 */
	public List<IndicatorOrgDTO> queryIndicatorOrgBaseAll(String kpiId);

	/**
	 * 根据指标内部编码获取默认的指标阈值集合
	 * 
	 * @param kpiId
	 *            指标内部编码
	 * @return
	 */
	public List<IndicatorValueDTO> queryIndicatorValueBaseAll(String kpiId);

	/**
	 * 新增一条指标配置表
	 * 
	 * @param dto
	 * @return 返回新增指标配置表的id
	 */
	public String insertIndicatorConfig(IndicatorConfigDTO dto);

	/**
	 * 批量新增指标类型
	 * 
	 * @param dtos
	 */
	public void insertIndicatorTypes(List<IndicatorTypeDTO> dtos);

	/**
	 * 批量新增指标机构关系
	 * 
	 * @param dtos
	 */
	public void insertIndicatorOrgs(List<IndicatorOrgDTO> dtos);

	/**
	 * 批量新增指标阈值
	 * 
	 * @param dtos
	 */
	public void insertIndicatorValues(List<IndicatorValueDTO> dtos);

	/**
	 * 更新区域指标配置表
	 */
	public void updateIndicatorArea(IndicatorAreaDTO dto);

	/**
	 * 根据条件查询一条指标配置表信息
	 * 
	 * @param map
	 *            kpiId 指标内部编码
	 * @return
	 */
	public IndicatorConfigDTO queryIndicatorConfig(Map<String, Object> map);

	/**
	 * 根据指标配置表id获取指标类型集合
	 * 
	 * @param kpiConfigId
	 *            指标配置表id
	 * @return
	 */
	public List<IndicatorTypeDTO> queryIndicatorTypeAll(String kpiConfigId);

	/**
	 * 根据指标配置表id获取指标机构集合
	 * 
	 * @param kpiConfigId
	 *            指标配置表id
	 * @return
	 */
	public List<IndicatorOrgDTO> queryIndicatorOrgAll(String kpiConfigId);

	/**
	 * 根据指指标配置表id获取指标阈值集合
	 * 
	 * @param kpiConfigId
	 *            指标配置表id
	 * @return
	 */
	public List<IndicatorValueDTO> queryIndicatorValueAll(String kpiConfigId);

	/**
	 * 根据指标配置id 删除指标类型集合
	 * 
	 * @param kpiConfigId
	 *            指标配置id
	 */
	public void deleteIndicatorType(String kpiConfigId);

	/**
	 * 根据指标配置id 删除指标机构集合
	 * 
	 * @param kpiConfigId
	 *            指标配置id
	 */
	public void deleteIndicatorOrg(String kpiConfigId);

	/**
	 * 根据指标配置id 删除指标阈值集合
	 * 
	 * @param kpiConfigId
	 *            指标配置id
	 */
	public void deleteIndicatorValue(String kpiConfigId);

	/**
	 * 更新单条阈值
	 * 
	 * @param map
	 */
	public void updateIndicatorValue(Map<String, Object> map);

	/**
	 * 根据统筹区编码查询所有指标
	 * 
	 * @param map
	 *            参数 ：regionCode 统筹区编码
	 * @return
	 */
	public List<IndicatorAreaDTO> queryIndicatorAreaAll(String regionCode);

	/**
	 * 根据指标内部编码查询基表预警规则
	 * 
	 * @param kpiId
	 *            指标内部编码
	 * @return
	 */
	public List<IndicatorWarnValueDTO> queryIndicatorWarnValueBaseAll(String kpiId);

	/**
	 * 批量新增指标预警规则
	 * 
	 * @param dtos
	 */
	public void insertIndicatorWarnValue(List<IndicatorWarnValueDTO> dtos);

	/**
	 * 根据指指标配置表id获取指标预警规则集合
	 * 
	 * @param kpiConfigId
	 *            指标配置表id
	 * @return
	 */
	public List<IndicatorWarnValueDTO> queryIndicatorWarnValueAll(String kpiConfigId);

	/**
	 * 根据指标预警规则修改记录
	 * 
	 * @param map
	 *            id 预警规则id， warnValue 预警的值
	 */
	public void updateIndicatorWarnValue(Map<String, Object> map);

	/**
	 * 根据id 更新指标配置表
	 * 
	 * @param dto
	 * 
	 */
	public void updateIndicatorConfig(IndicatorConfigDTO dto);

	/**
	 * 计算阈值区间取参与计算数据
	 * 
	 * @param map
	 * @return
	 */
	public List<IndicatorValues4CalDTO> queryKpiValues4Cal(Map<String, Object> map);

	/**
	 * 根据区域获取regionCode
	 * 
	 * @param userName
	 * @return
	 */
	public List<RegionDTO> queryRegionByUserName(String userName);

	public int numOfOrg(Map<String,Object> map);

}
